package com.carefree.bookmall.dao;


import com.carefree.bookmall.entity.Order;
import com.carefree.bookmall.entity.OrderItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单
 *
 * @author Aurora
 */
public interface OrderMapper {

    /**
     * 添加订单
     *
     * @param order 订单信息
     * @return 受影响行数
     */
    public int addOrder(Order order);

    /**
     * 添加订单关联信息
     *
     * @param orderItem 订单关联信息
     * @return 受影响行数
     */
    public int addOrderItem(OrderItem orderItem);

    /**
     * 删除订单信息
     *
     * @param orderId 订单id
     * @return 受影响行数
     */
    public int deleteOrder(String orderId);

    /**
     * 删除订单关联信息
     *
     * @param orderId 订单id
     * @return 受影响行数
     */
    public int deleteOrderItem(String orderId);

    /**
     * 根据用户id查询订单信息
     *
     * @param userId 用户id
     * @return
     */
    public List<Order> selectOrderByUserId(Integer userId);

    /**
     * 根据订单id查询订单关联信息
     *
     * @param orderId 订单id
     * @return
     */
    public List<OrderItem> selectOrderItemByOrderId(String orderId);

    /**
     * 分页查询订单信息
     *
     * @param pageNum  页码
     * @param pageSize 每页显示记录数
     * @return
     */
    public List<Order> selectOrder(int pageNum, int pageSize);

    /**
     * 查询订单总数
     *
     * @return
     */
    public int selectCountOfOrder();

    /**
     * 根据订单状态查询订单信息
     *
     * @param status   订单状态
     * @param pageNum  页码
     * @param pageSize 每页显示数
     * @return
     */
    public List<Order> selectOrderByStatus(Integer status, int pageNum, int pageSize);

    /**
     * 根据订单状态查询指定状态下的订单数
     *
     * @param status 订单状态
     * @return
     */
    public int selectCountOfOrderByOstatus(Integer status);

    /**
     * 修改订单状态
     *
     * @param orderId 订单id
     * @param status  订单状态
     * @return 受影响行数
     */
    public int updateOrderStatus(@Param("id") String orderId, @Param("status") Integer status);

    /**
     * 查询今日收入(已付款)
     *
     * @return
     */
    public Double selectIncoming();

    /**
     * 根据订单号查询订单
     *
     * @param orderId 订单号
     * @param userId  用户id
     * @return
     */
    Order selectOrderById(String orderId, Integer userId);

    /**
     * 根据订单号和用户id修改支付类型
     *
     * @param orderId 订单号
     * @param paytype 支付类型
     * @param userId  用户id
     * @return
     */
    int updateOrderByIdAndUserId(@Param("orderId") String orderId, @Param("paytype") Integer paytype, @Param("status") Integer status);
}
